package com.dms.modules.message.service;

import com.dms.modules.message.enums.BusinessMessageType;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 消息模板服务
 */
@Slf4j
@Service
public class MessageTemplateService {
    
    private static final Map<BusinessMessageType, String> TEMPLATES = new HashMap<>();
    
    static {
        // 订单消息模板
        TEMPLATES.put(BusinessMessageType.ORDER_CREATED, 
            "您的订单 {orderId} 已创建成功，请尽快支付");
        TEMPLATES.put(BusinessMessageType.ORDER_PAID, 
            "您的订单 {orderId} 已支付成功，支付金额：{amount}元");
        TEMPLATES.put(BusinessMessageType.ORDER_SHIPPED, 
            "您的订单 {orderId} 已发货，物流单号：{trackingNo}");
        TEMPLATES.put(BusinessMessageType.ORDER_COMPLETED, 
            "您的订单 {orderId} 已完成，感谢您的购买");
        
        // 商品消息模板
        TEMPLATES.put(BusinessMessageType.PRODUCT_BACK_IN_STOCK,
            "您关注的商品 {productName} 已重新有货，当前库存：{stock}件");
        TEMPLATES.put(BusinessMessageType.PRODUCT_PRICE_CHANGE,
            "您关注的商品 {productName} 价格已更新为：{price}元");
        TEMPLATES.put(BusinessMessageType.PRODUCT_PROMOTION,
            "您关注的商品 {productName} 正在促销，促销价：{promotionPrice}元");
    }
    
    /**
     * 获取消息内容
     * @param type 消息类型
     * @param params 参数
     * @return 消息内容
     */
    public String getContent(BusinessMessageType type, Map<String, Object> params) {
        try {
            String template = TEMPLATES.get(type);
            if (template == null) {
                log.warn("消息模板不存在: type={}", type);
                return "";
            }
            
            // 替换模板参数
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                template = template.replace("{" + entry.getKey() + "}", 
                    String.valueOf(entry.getValue()));
            }
            
            return template;
        } catch (Exception e) {
            log.error("生成消息内容失败: type={}, params={}, error={}", 
                type, params, e.getMessage(), e);
            return "";
        }
    }
} 